#include "msg.h"

#define PATHNAME "../../msg"
#define PRO_ID 99

int msg_create()
{
    int msg_id;
    key_t key = ftok(PATHNAME, PRO_ID);

    msg_id = msgget(key, 0);
    if (-1 == msg_id)
    {
        msg_id = msgget(key, IPC_CREAT | 0644);
        if (-1 == msg_id)
        {
            perror("msgget()");
            return -1;
        }
    }

    return msg_id;
}

int msg_send(int msgid, long mtype, char *buf)
{
    struct msgbuf msg;
    msg.mtype = mtype;
    strcpy(msg.mtext, buf);

    return msgsnd(msgid, (void *)&msg, strlen(msg.mtext) + 1, 0);
}

int msg_rcv(int msgid, long mtype, char *buf, int len)
{
    struct msgbuf msg;
    int ret;

    ret = msgrcv(msgid, (void *)&msg, len, mtype, 0);
    if (-1 == ret)
    {
        perror("msgrcv()");
        return -1;
    }

    strcpy(buf, msg.mtext);

    return ret;
}

int msg_del(int msgid)
{
    return msgctl(msgid, IPC_RMID, NULL);
}